package com.projeto.bola.web.usuario;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;

public class UsuarioDAOHibernate implements UsuarioDAO {
	
	private Session sessao;
	
	
	public Session getSessao() {
		return sessao;
	}

	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}

	@Override
	public void salvar(Usuario usuario) {		
			this.sessao.save(usuario);			
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> listar() {
		Criteria lista = sessao.createCriteria(Usuario.class);
		return lista.list();
	}

	@Override
	public void excluir(Usuario usuario) {
		this.sessao.delete(usuario);		
	}

	@Override
	public Usuario pesquisarUsuarioNome(String nome) {
		String sql = "from Usuario u where u.nome like :nome";
		Query consulta = sessao.createQuery(sql);
		consulta.setString("nome", "%" + nome + "%");
		return (Usuario) consulta.uniqueResult();
	}

	@Override
	public void alterar(Usuario usuario) {
		this.sessao.merge(usuario);
	}

	@Override
	public Usuario verificarDados(Usuario usuario) throws Exception {
		Usuario us = null;
		try {
			String sql = "from Usuario u where u.email = :email and u.senha = :senha";			
			Query consulta = sessao.createQuery(sql);
			consulta.setString("email", usuario.getEmail());
			consulta.setString("senha", usuario.getSenha());
			if(!consulta.list().isEmpty()){
				us = (Usuario) consulta.list().get(0);
			}
		} catch (Exception e) {
			throw e;
		}
		return us;
	}

	@Override
	public Usuario pesquisaPorCodigo(Integer codigo) {
		
		return (Usuario) this.sessao.get(Usuario.class, codigo);
	}

	@Override
	public Usuario pesquisaUsuarioPorEmail(String email) throws Exception{
		String sql = "from Usuario u where u.email = :email";
		Query consulta = sessao.createQuery(sql);
		consulta.setString("email", email);
		return (Usuario) consulta.uniqueResult();
	}

}
